package com.bigknow.net.minidev.asm;

import java.util.Calendar;
import java.util.Comparator;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.HashSet;
import java.util.StringTokenizer;
import java.util.TreeMap;

public class ConvertDate {
	static TreeMap<String, Integer> monthsTable = new TreeMap<String, Integer>(new StringCmpNS()); // StringCmpNS.COMP
	static TreeMap<String, Integer> daysTable = new TreeMap<String, Integer>(new StringCmpNS()); // StringCmpNS.COMP
	private static HashSet<String> voidData = new HashSet<String>();

	public static class StringCmpNS implements Comparator<String> {
		public int compare(String o1, String o2) {
			return o1.compareToIgnoreCase(o2);
		}
	}

	public static Integer getMonth(String month) {
		return monthsTable.get(month);
	}

	private static Integer parseMonth(String s1) {
		if (Character.isDigit(s1.charAt(0))) {
			return Integer.parseInt(s1) - 1;
		} else {
			Integer month = monthsTable.get(s1);
			if (month == null)
				throw new NullPointerException("can not parse " + s1 + " as month");
			return month.intValue();
		}
	}

	static {
		voidData.add("CET");
		voidData.add("MEZ");
		voidData.add("Uhr");
		voidData.add("h");
		voidData.add("pm");
		voidData.add("PM");
		voidData.add("o'clock");

		// for (int c = 1; c <= 31; c++) {
		// String s = Integer.toString(c);
		// if (c < 10)
		// daysTable.put("0".concat(s), c - 1);
		// daysTable.put(s, c - 1);
		// }

		// for (int c = 1; c <= 12; c++) {
		// String s = Integer.toString(c);
		// if (c < 10)
		// monthsTable.put("0".concat(s), c - 1);
		// monthsTable.put(s, c - 1);
		// }

		monthsTable.put("abr", 3);
		monthsTable.put("abril", 3);
		monthsTable.put("ago", 7);
		monthsTable.put("agosto", 7);
		monthsTable.put("Agu", 7);
		monthsTable.put("Agustus", 7);
		monthsTable.put("Aib", 3);
		monthsTable.put("Aibreán", 3);
		monthsTable.put("aout", 7);
		monthsTable.put("août", 7);
		monthsTable.put("Apr", 3);
		monthsTable.put("apr.", 3);
		monthsTable.put("April", 3);
		monthsTable.put("aprile", 3);
		monthsTable.put("aprilie", 3);
		monthsTable.put("aprill", 3);
		monthsTable.put("apríl", 3);
		monthsTable.put("apríla", 3);
		monthsTable.put("aprīlis", 3);
		monthsTable.put("Ara", 11);
		monthsTable.put("Aralık", 11);
		monthsTable.put("Aug", 7);
		monthsTable.put("aug.", 7);
		monthsTable.put("August", 7);
		monthsTable.put("augusta", 7);
		monthsTable.put("augusti", 7);
		monthsTable.put("augusts", 7);
		monthsTable.put("augustus", 7);
		monthsTable.put("augusztus", 7);
		monthsTable.put("avg", 7);
		monthsTable.put("avg.", 7);
		monthsTable.put("avgust", 7);
		monthsTable.put("avr", 3);
		monthsTable.put("avr.", 3);
		monthsTable.put("avril", 3);
		monthsTable.put("Aww", 7);
		monthsTable.put("Awwissu", 7);
		monthsTable.put("Ağu", 7);
		monthsTable.put("Ağustos", 7);
		monthsTable.put("Bal", 3);
		monthsTable.put("balandis", 3);
		monthsTable.put("Beal", 4);
		monthsTable.put("Bealtaine", 4);
		monthsTable.put("Bir", 5);
		monthsTable.put("birželis", 5);
		monthsTable.put("Bře", 2);
		monthsTable.put("března", 2);
		monthsTable.put("cze", 5);
		monthsTable.put("czerwca", 5);
		monthsTable.put("de des", 11);
		monthsTable.put("de des.", 11);
		monthsTable.put("de desembre", 11);
		monthsTable.put("de febr", 1);
		monthsTable.put("de febr.", 1);
		monthsTable.put("de febrer", 1);
		monthsTable.put("de gen", 0);
		monthsTable.put("de gen.", 0);
		monthsTable.put("de gener", 0);
		monthsTable.put("de jul", 6);
		monthsTable.put("de jul.", 6);
		monthsTable.put("de juliol", 6);
		monthsTable.put("de juny", 5);
		monthsTable.put("de maig", 4);
		monthsTable.put("de març", 2);
		monthsTable.put("de nov", 10);
		monthsTable.put("de nov.", 10);
		monthsTable.put("de novembre", 10);
		monthsTable.put("de set", 8);
		monthsTable.put("de set.", 8);
		monthsTable.put("de setembre", 8);
		monthsTable.put("Dec", 11);
		monthsTable.put("dec.", 11);
		monthsTable.put("decembar", 11);
		monthsTable.put("December", 11);
		monthsTable.put("decembra", 11);
		monthsTable.put("decembre", 11);
		monthsTable.put("decembrie", 11);
		monthsTable.put("decembris", 11);
		monthsTable.put("Deireadh Fómhair", 9);
		monthsTable.put("Des", 11);
		monthsTable.put("des.", 11);
		monthsTable.put("Desember", 11);
		monthsTable.put("dets", 11);
		monthsTable.put("detsember", 11);
		monthsTable.put("dez", 11);
		monthsTable.put("Dezember", 11);
		monthsTable.put("Dezembro", 11);
		monthsTable.put("DFómh", 9);
		monthsTable.put("Dhj", 11);
		monthsTable.put("dhjetor", 11);
		monthsTable.put("dic", 11);
		monthsTable.put("dicembre", 11);
		monthsTable.put("diciembre", 11);
		monthsTable.put("Dis", 11);
		monthsTable.put("Disember", 11);
		monthsTable.put("Diċ", 11);
		monthsTable.put("Diċembru", 11);
		monthsTable.put("Dub", 3);
		monthsTable.put("dubna", 3);
		monthsTable.put("déc", 11);
		monthsTable.put("déc.", 11);
		monthsTable.put("décembre", 11);
		monthsTable.put("d’abr", 3);
		monthsTable.put("d’abr.", 3);
		monthsTable.put("d’abril", 3);
		monthsTable.put("d’ag", 7);
		monthsTable.put("d’ag.", 7);
		monthsTable.put("d’agost", 7);
		monthsTable.put("d’oct", 9);
		monthsTable.put("d’oct.", 9);
		monthsTable.put("d’octubre", 9);
		monthsTable.put("Ean", 0);
		monthsTable.put("Eanáir", 0);
		monthsTable.put("Eki", 9);
		monthsTable.put("Ekim", 9);
		monthsTable.put("elokuuta", 7);
		monthsTable.put("ene", 0);
		monthsTable.put("enero", 0);
		monthsTable.put("Eyl", 8);
		monthsTable.put("Eylül", 8);
		monthsTable.put("Feabh", 1);
		monthsTable.put("Feabhra", 1);
		monthsTable.put("Feb", 1);
		monthsTable.put("feb.", 1);
		monthsTable.put("febbraio", 1);
		monthsTable.put("febr", 1);
		monthsTable.put("febr.", 1);
		monthsTable.put("febrero", 1);
		monthsTable.put("februar", 1);
		monthsTable.put("februari", 1);
		monthsTable.put("februarie", 1);
		monthsTable.put("February", 1);
		monthsTable.put("február", 1);
		monthsTable.put("februára", 1);
		monthsTable.put("februāris", 1);
		monthsTable.put("febrúar", 1);
		monthsTable.put("fev", 1);
		monthsTable.put("Fevereiro", 1);
		monthsTable.put("fevr", 1);
		monthsTable.put("fevr.", 1);
		monthsTable.put("fevrier", 1);
		monthsTable.put("Fra", 1);
		monthsTable.put("Frar", 1);
		monthsTable.put("févr", 1);
		monthsTable.put("févr.", 1);
		monthsTable.put("février", 1);
		monthsTable.put("Geg", 4);
		monthsTable.put("gegužė", 4);
		monthsTable.put("gen", 0);
		monthsTable.put("gennaio", 0);
		monthsTable.put("giu", 5);
		monthsTable.put("giugno", 5);
		monthsTable.put("Grd", 11);
		monthsTable.put("gru", 11);
		monthsTable.put("grudnia", 11);
		monthsTable.put("gruodis", 11);
		monthsTable.put("Gsh", 7);
		monthsTable.put("gusht", 7);
		monthsTable.put("Haz", 5);
		monthsTable.put("Haziran", 5);
		monthsTable.put("heinäkuuta", 6);
		monthsTable.put("helmikuuta", 1);
		monthsTable.put("huhtikuuta", 3);
		monthsTable.put("I", 0);
		monthsTable.put("Ian", 0);
		monthsTable.put("ianuarie", 0);
		monthsTable.put("II", 1);
		monthsTable.put("III", 2);
		monthsTable.put("Iul", 6);
		monthsTable.put("iulie", 6);
		monthsTable.put("Iun", 5);
		monthsTable.put("iunie", 5);
		monthsTable.put("IV", 3);
		monthsTable.put("IX", 8);
		monthsTable.put("Iúil", 6);
		monthsTable.put("jaan", 0);
		monthsTable.put("jaanuar", 0);
		monthsTable.put("Jan", 0);
		monthsTable.put("jan.", 0);
		monthsTable.put("janar", 0);
		monthsTable.put("Janeiro", 0);
		monthsTable.put("Jannar", 0);
		monthsTable.put("januar", 0);
		monthsTable.put("januari", 0);
		monthsTable.put("January", 0);
		monthsTable.put("január", 0);
		monthsTable.put("januára", 0);
		monthsTable.put("janv", 0);
		monthsTable.put("janv.", 0);
		monthsTable.put("janvier", 0);
		monthsTable.put("janvāris", 0);
		monthsTable.put("janúar", 0);
		monthsTable.put("joulukuuta", 11);
		monthsTable.put("juil", 6);
		monthsTable.put("juil.", 6);
		monthsTable.put("juillet", 6);
		monthsTable.put("juin", 5);
		monthsTable.put("Jul", 6);
		monthsTable.put("jul.", 6);
		monthsTable.put("Julai", 6);
		monthsTable.put("Julho", 6);
		monthsTable.put("juli", 6);
		monthsTable.put("julij", 6);
		monthsTable.put("julio", 6);
		monthsTable.put("July", 6);
		monthsTable.put("Jun", 5);
		monthsTable.put("jun.", 5);
		monthsTable.put("June", 5);
		monthsTable.put("Junho", 5);
		monthsTable.put("juni", 5);
		monthsTable.put("junij", 5);
		monthsTable.put("junio", 5);
		monthsTable.put("juuli", 6);
		monthsTable.put("juuni", 5);
		monthsTable.put("Jän", 0);
		monthsTable.put("Jänner", 0);
		monthsTable.put("júl", 6);
		monthsTable.put("júl.", 6);
		monthsTable.put("júla", 6);
		monthsTable.put("július", 6);
		monthsTable.put("júlí", 6);
		monthsTable.put("jún", 5);
		monthsTable.put("jún.", 5);
		monthsTable.put("júna", 5);
		monthsTable.put("június", 5);
		monthsTable.put("júní", 5);
		monthsTable.put("jūl", 6);
		monthsTable.put("jūl.", 6);
		monthsTable.put("jūlijs", 6);
		monthsTable.put("jūn", 5);
		monthsTable.put("jūn.", 5);
		monthsTable.put("jūnijs", 5);
		monthsTable.put("Kas", 10);
		monthsTable.put("Kasım", 10);
		monthsTable.put("kesäkuuta", 5);
		monthsTable.put("kol", 7);
		monthsTable.put("kolovoza", 7);
		monthsTable.put("Kor", 6);
		monthsTable.put("korrik", 6);
		monthsTable.put("Kov", 2);
		monthsTable.put("kovas", 2);
		monthsTable.put("Kvě", 4);
		monthsTable.put("května", 4);
		monthsTable.put("kwi", 3);
		monthsTable.put("kwietnia", 3);
		monthsTable.put("Lap", 10);
		monthsTable.put("lapkritis", 10);
		monthsTable.put("Led", 0);
		monthsTable.put("ledna", 0);
		monthsTable.put("Lie", 6);
		monthsTable.put("liepa", 6);
		monthsTable.put("lip", 6);
		monthsTable.put("lipca", 6);
		monthsTable.put("lipnja", 5);
		monthsTable.put("lis", 10);
		monthsTable.put("listopada", 10);
		monthsTable.put("listopadu", 10);
		monthsTable.put("lokakuuta", 9);
		monthsTable.put("lug", 6);
		monthsTable.put("luglio", 6);
		monthsTable.put("Lul", 6);
		monthsTable.put("Lulju", 6);
		monthsTable.put("lut", 1);
		monthsTable.put("lutego", 1);
		monthsTable.put("Lún", 7);
		monthsTable.put("Lúnasa", 7);
		monthsTable.put("maaliskuuta", 2);
		monthsTable.put("maart", 2);
		monthsTable.put("Mac", 2);
		monthsTable.put("mag", 4);
		monthsTable.put("maggio", 4);
		monthsTable.put("mai", 4);
		monthsTable.put("maijs", 4);
		monthsTable.put("Maio", 4);
		monthsTable.put("maj", 4);
		monthsTable.put("maja", 4);
		monthsTable.put("Mar", 2);
		monthsTable.put("mar.", 2);
		monthsTable.put("marca", 2);
		monthsTable.put("March", 2);
		monthsTable.put("marec", 2);
		monthsTable.put("Maret", 2);
		monthsTable.put("marraskuuta", 10);
		monthsTable.put("mars", 2);
		monthsTable.put("mart", 2);
		monthsTable.put("martie", 2);
		monthsTable.put("marts", 2);
		monthsTable.put("marzo", 2);
		monthsTable.put("Marzu", 2);
		monthsTable.put("Março", 2);
		monthsTable.put("May", 4);
		monthsTable.put("Mayıs", 4);
		monthsTable.put("mayo", 4);
		monthsTable.put("maí", 4);
		monthsTable.put("Mei", 4);
		monthsTable.put("Meith", 5);
		monthsTable.put("Meitheamh", 5);
		monthsTable.put("Mej", 4);
		monthsTable.put("Mejju", 4);
		monthsTable.put("Meán Fómhair", 8);
		monthsTable.put("MFómh", 8);
		monthsTable.put("mrt", 2);
		monthsTable.put("máj", 4);
		monthsTable.put("máj.", 4);
		monthsTable.put("mája", 4);
		monthsTable.put("május", 4);
		monthsTable.put("márc", 2);
		monthsTable.put("márc.", 2);
		monthsTable.put("március", 2);
		monthsTable.put("Márta", 2);
		monthsTable.put("Mär", 2);
		monthsTable.put("märts", 2);
		monthsTable.put("März", 2);
		monthsTable.put("Nis", 3);
		monthsTable.put("Nisan", 3);
		monthsTable.put("noiembrie", 10);
		monthsTable.put("Noll", 11);
		monthsTable.put("Nollaig", 11);
		monthsTable.put("Nov", 10);
		monthsTable.put("nov.", 10);
		monthsTable.put("novembar", 10);
		monthsTable.put("November", 10);
		monthsTable.put("novembra", 10);
		monthsTable.put("novembre", 10);
		monthsTable.put("novembris", 10);
		monthsTable.put("Novembro", 10);
		monthsTable.put("Novembru", 10);
		monthsTable.put("noviembre", 10);
		monthsTable.put("Nën", 10);
		monthsTable.put("nëntor", 10);
		monthsTable.put("nóv", 10);
		monthsTable.put("nóv.", 10);
		monthsTable.put("nóvember", 10);
		monthsTable.put("Oca", 0);
		monthsTable.put("Ocak", 0);
		monthsTable.put("Oct", 9);
		monthsTable.put("oct.", 9);
		monthsTable.put("October", 9);
		monthsTable.put("octobre", 9);
		monthsTable.put("octombrie", 9);
		monthsTable.put("octubre", 9);
		monthsTable.put("Ogos", 7);
		monthsTable.put("okt", 9);
		monthsTable.put("okt.", 9);
		monthsTable.put("oktobar", 9);
		monthsTable.put("oktober", 9);
		monthsTable.put("oktobris", 9);
		monthsTable.put("oktoober", 9);
		monthsTable.put("október", 9);
		monthsTable.put("októbra", 9);
		monthsTable.put("Ott", 9);
		monthsTable.put("ottobre", 9);
		monthsTable.put("Ottubru", 9);
		monthsTable.put("out", 9);
		monthsTable.put("Outubro", 9);
		monthsTable.put("ožu", 2);
		monthsTable.put("ožujka", 2);
		monthsTable.put("paź", 9);
		monthsTable.put("października", 9);
		monthsTable.put("Pri", 3);
		monthsTable.put("prill", 3);
		monthsTable.put("pro", 11);
		monthsTable.put("prosinca", 11);
		monthsTable.put("prosince", 11);
		monthsTable.put("Qer", 5);
		monthsTable.put("qershor", 5);
		monthsTable.put("Rgp", 7);
		monthsTable.put("Rgs", 8);
		monthsTable.put("rugpjūtis", 7);
		monthsTable.put("rugsėjis", 8);
		monthsTable.put("ruj", 8);
		monthsTable.put("rujna", 8);
		monthsTable.put("Samh", 10);
		monthsTable.put("Samhain", 10);
		monthsTable.put("Sau", 0);
		monthsTable.put("sausio", 0);
		monthsTable.put("Sep", 8);
		monthsTable.put("sep.", 8);
		monthsTable.put("sept", 8);
		monthsTable.put("sept.", 8);
		monthsTable.put("septembar", 8);
		monthsTable.put("September", 8);
		monthsTable.put("septembra", 8);
		monthsTable.put("septembre", 8);
		monthsTable.put("septembrie", 8);
		monthsTable.put("septembris", 8);
		monthsTable.put("septiembre", 8);
		monthsTable.put("Set", 8);
		monthsTable.put("Setembro", 8);
		monthsTable.put("settembre", 8);
		monthsTable.put("Settembru", 8);
		monthsTable.put("Shk", 1);
		monthsTable.put("shkurt", 1);
		monthsTable.put("Sht", 8);
		monthsTable.put("shtator", 8);
		monthsTable.put("sie", 7);
		monthsTable.put("sierpnia", 7);
		monthsTable.put("sij", 0);
		monthsTable.put("siječnja", 0);
		monthsTable.put("Spa", 9);
		monthsTable.put("spalis", 9);
		monthsTable.put("srp", 6);
		monthsTable.put("srpna", 7);
		monthsTable.put("srpnja", 6);
		monthsTable.put("stu", 10);
		monthsTable.put("studenoga", 10);
		monthsTable.put("sty", 0);
		monthsTable.put("stycznia", 0);
		monthsTable.put("svi", 4);
		monthsTable.put("svibnja", 4);
		monthsTable.put("syyskuuta", 8);
		monthsTable.put("szept", 8);
		monthsTable.put("szept.", 8);
		monthsTable.put("szeptember", 8);
		monthsTable.put("tammikuuta", 0);
		monthsTable.put("Tem", 6);
		monthsTable.put("Temmuz", 6);
		monthsTable.put("Tet", 9);
		monthsTable.put("tetor", 9);
		monthsTable.put("tháng ba", 2);
		monthsTable.put("tháng bảy", 6);
		monthsTable.put("tháng chín", 8);
		monthsTable.put("tháng hai", 1);
		monthsTable.put("tháng mười", 9);
		monthsTable.put("tháng mười hai", 11);
		monthsTable.put("tháng mười một", 10);
		monthsTable.put("tháng một", 0);
		monthsTable.put("tháng năm", 4);
		monthsTable.put("tháng sáu", 5);
		monthsTable.put("tháng tám", 7);
		monthsTable.put("tháng tư", 3);
		monthsTable.put("toukokuuta", 4);
		monthsTable.put("tra", 3);
		monthsTable.put("travnja", 3);
		monthsTable.put("V", 4);
		monthsTable.put("Vas", 1);
		monthsTable.put("vasaris", 1);
		monthsTable.put("veebr", 1);
		monthsTable.put("veebruar", 1);
		monthsTable.put("velj", 1);
		monthsTable.put("veljače", 1);
		monthsTable.put("VI", 5);
		monthsTable.put("VII", 6);
		monthsTable.put("VIII", 7);
		monthsTable.put("wrz", 8);
		monthsTable.put("września", 8);
		monthsTable.put("X", 9);
		monthsTable.put("XI", 10);
		monthsTable.put("XII", 11);
		monthsTable.put("Zář", 8);
		monthsTable.put("září", 8);
		monthsTable.put("ágú", 7);
		monthsTable.put("ágú.", 7);
		monthsTable.put("ágúst", 7);
		monthsTable.put("ápr", 3);
		monthsTable.put("ápr.", 3);
		monthsTable.put("április", 3);
		monthsTable.put("Úno", 1);
		monthsTable.put("února", 1);
		monthsTable.put("Čer", 5);
		monthsTable.put("července", 6);
		monthsTable.put("června", 5);
		monthsTable.put("Čvc", 6);
		monthsTable.put("Ġun", 5);
		monthsTable.put("Ġunju", 5);
		monthsTable.put("Říj", 9);
		monthsTable.put("října", 9);
		monthsTable.put("Şub", 1);
		monthsTable.put("Şubat", 1);
		monthsTable.put("Απρ", 3);
		monthsTable.put("Απρίλιος", 3);
		monthsTable.put("Απριλίου", 3);
		monthsTable.put("Αυγ", 7);
		monthsTable.put("Αυγούστου", 7);
		monthsTable.put("Αύγουστος", 7);
		monthsTable.put("Δεκ", 11);
		monthsTable.put("Δεκέμβριος", 11);
		monthsTable.put("Δεκεμβρίου", 11);
		monthsTable.put("Ιαν", 0);
		monthsTable.put("Ιανουάριος", 0);
		monthsTable.put("Ιανουαρίου", 0);
		monthsTable.put("Ιουλ", 6);
		monthsTable.put("Ιουλίου", 6);
		monthsTable.put("Ιουν", 5);
		monthsTable.put("Ιουνίου", 5);
		monthsTable.put("Ιούλιος", 6);
		monthsTable.put("Ιούνιος", 5);
		monthsTable.put("Μάιος", 4);
		monthsTable.put("Μάρτιος", 2);
		monthsTable.put("Μαΐου", 4);
		monthsTable.put("Μαρ", 2);
		monthsTable.put("Μαρτίου", 2);
		monthsTable.put("Μαϊ", 4);
		monthsTable.put("Νοέμβριος", 10);
		monthsTable.put("Νοε", 10);
		monthsTable.put("Νοεμβρίου", 10);
		monthsTable.put("Οκτ", 9);
		monthsTable.put("Οκτωβρίου", 9);
		monthsTable.put("Οκτώβριος", 9);
		monthsTable.put("Σεπ", 8);
		monthsTable.put("Σεπτέμβριος", 8);
		monthsTable.put("Σεπτεμβρίου", 8);
		monthsTable.put("Φεβ", 1);
		monthsTable.put("Φεβρουάριος", 1);
		monthsTable.put("Φεβρουαρίου", 1);
		monthsTable.put("авг", 7);
		monthsTable.put("авг.", 7);
		monthsTable.put("Август", 7);
		monthsTable.put("августа", 7);
		monthsTable.put("апр", 3);
		monthsTable.put("апр.", 3);
		monthsTable.put("апреля", 3);
		monthsTable.put("Април", 3);
		monthsTable.put("бер", 2);
		monthsTable.put("бер.", 2);
		monthsTable.put("березня", 2);
		monthsTable.put("вер", 8);
		monthsTable.put("вер.", 8);
		monthsTable.put("верасня", 8);
		monthsTable.put("вересня", 8);
		monthsTable.put("врс", 8);
		monthsTable.put("груд", 11);
		monthsTable.put("груд.", 11);
		monthsTable.put("грудня", 11);
		monthsTable.put("дек", 11);
		monthsTable.put("декабря", 11);
		monthsTable.put("декем", 11);
		monthsTable.put("декем.", 11);
		monthsTable.put("Декември", 11);
		monthsTable.put("дец", 11);
		monthsTable.put("децембар", 11);
		monthsTable.put("жнв", 7);
		monthsTable.put("жніўня", 7);
		monthsTable.put("жовт", 9);
		monthsTable.put("жовт.", 9);
		monthsTable.put("жовтня", 9);
		monthsTable.put("июл", 6);
		monthsTable.put("июля", 6);
		monthsTable.put("июн", 5);
		monthsTable.put("июня", 5);
		monthsTable.put("кастрычніка", 9);
		monthsTable.put("квіт", 3);
		monthsTable.put("квіт.", 3);
		monthsTable.put("квітня", 3);
		monthsTable.put("красавіка", 3);
		monthsTable.put("крс", 3);
		monthsTable.put("кст", 9);
		monthsTable.put("лип", 6);
		monthsTable.put("лип.", 6);
		monthsTable.put("липня", 6);
		monthsTable.put("лист", 10);
		monthsTable.put("лист.", 10);
		monthsTable.put("листопада", 10);
		monthsTable.put("лпн", 6);
		monthsTable.put("лют", 1);
		monthsTable.put("лют.", 1);
		monthsTable.put("лютага", 1);
		monthsTable.put("лютого", 1);
		monthsTable.put("ліпеня", 6);
		monthsTable.put("ліс", 10);
		monthsTable.put("лістапада", 10);
		monthsTable.put("Май", 4);
		monthsTable.put("мар", 2);
		monthsTable.put("мар.", 2);
		monthsTable.put("Март", 2);
		monthsTable.put("марта", 2);
		monthsTable.put("мая", 4);
		monthsTable.put("мај", 4);
		monthsTable.put("мај.", 4);
		monthsTable.put("нов", 10);
		monthsTable.put("новембар", 10);
		monthsTable.put("ноем", 10);
		monthsTable.put("ноем.", 10);
		monthsTable.put("Ноември", 10);
		monthsTable.put("ноя", 10);
		monthsTable.put("ноября", 10);
		monthsTable.put("окт", 9);
		monthsTable.put("окт.", 9);
		monthsTable.put("октобар", 9);
		monthsTable.put("Октомври", 9);
		monthsTable.put("октября", 9);
		monthsTable.put("сакавіка", 2);
		monthsTable.put("сен", 8);
		monthsTable.put("сентября", 8);
		monthsTable.put("сеп", 8);
		monthsTable.put("септ", 8);
		monthsTable.put("септ.", 8);
		monthsTable.put("септембар", 8);
		monthsTable.put("Септември", 8);
		monthsTable.put("серп", 7);
		monthsTable.put("серп.", 7);
		monthsTable.put("серпня", 7);
		monthsTable.put("скв", 2);
		monthsTable.put("снежня", 11);
		monthsTable.put("снж", 11);
		monthsTable.put("стд", 0);
		monthsTable.put("студзеня", 0);
		monthsTable.put("січ", 0);
		monthsTable.put("січ.", 0);
		monthsTable.put("січня", 0);
		monthsTable.put("трав", 4);
		monthsTable.put("трав.", 4);
		monthsTable.put("травня", 4);
		monthsTable.put("феб", 1);
		monthsTable.put("фебруар", 1);
		monthsTable.put("фев", 1);
		monthsTable.put("фев.", 1);
		monthsTable.put("февраля", 1);
		monthsTable.put("Февруари", 1);
		monthsTable.put("черв", 5);
		monthsTable.put("черв.", 5);
		monthsTable.put("червня", 5);
		monthsTable.put("чрв", 5);
		monthsTable.put("чрвеня", 5);
		monthsTable.put("Юли", 6);
		monthsTable.put("Юни", 5);
		monthsTable.put("янв", 0);
		monthsTable.put("января", 0);
		monthsTable.put("Януари", 0);
		monthsTable.put("јан", 0);
		monthsTable.put("јан.", 0);
		monthsTable.put("јануар", 0);
		monthsTable.put("јануари", 0);
		monthsTable.put("јул", 6);
		monthsTable.put("јул.", 6);
		monthsTable.put("јули", 6);
		monthsTable.put("јун", 5);
		monthsTable.put("јун.", 5);
		monthsTable.put("јуни", 5);
		monthsTable.put("אוג", 7);
		monthsTable.put("אוגוסט", 7);
		monthsTable.put("אוק", 9);
		monthsTable.put("אוקטובר", 9);
		monthsTable.put("אפר", 3);
		monthsTable.put("אפריל", 3);
		monthsTable.put("דצמ", 11);
		monthsTable.put("דצמבר", 11);
		monthsTable.put("יול", 6);
		monthsTable.put("יולי", 6);
		monthsTable.put("יונ", 5);
		monthsTable.put("יוני", 5);
		monthsTable.put("ינו", 0);
		monthsTable.put("ינואר", 0);
		monthsTable.put("מאי", 4);
		monthsTable.put("מרץ", 2);
		monthsTable.put("נוב", 10);
		monthsTable.put("נובמבר", 10);
		monthsTable.put("ספט", 8);
		monthsTable.put("ספטמבר", 8);
		monthsTable.put("פבר", 1);
		monthsTable.put("פברואר", 1);
		monthsTable.put("آب", 7);
		monthsTable.put("آذار", 2);
		monthsTable.put("أبر", 3);
		monthsTable.put("أبريل", 3);
		monthsTable.put("أغس", 7);
		monthsTable.put("أغسطس", 7);
		monthsTable.put("أكت", 9);
		monthsTable.put("أكتوبر", 9);
		monthsTable.put("أيلول", 8);
		monthsTable.put("تشرين الأول", 9);
		monthsTable.put("تشرين الثاني", 10);
		monthsTable.put("تموز", 6);
		monthsTable.put("حزير", 5);
		monthsTable.put("حزيران", 5);
		monthsTable.put("ديس", 11);
		monthsTable.put("ديسمبر", 11);
		monthsTable.put("سبت", 8);
		monthsTable.put("سبتمبر", 8);
		monthsTable.put("شباط", 1);
		monthsTable.put("فبر", 1);
		monthsTable.put("فبراير", 1);
		monthsTable.put("كانون الأول", 11);
		monthsTable.put("كانون الثاني", 0);
		monthsTable.put("مار", 2);
		monthsTable.put("مارس", 2);
		monthsTable.put("ماي", 4);
		monthsTable.put("مايو", 4);
		monthsTable.put("نوار", 4);
		monthsTable.put("نواران", 4);
		monthsTable.put("نوف", 10);
		monthsTable.put("نوفمبر", 10);
		monthsTable.put("نيسان", 3);
		monthsTable.put("ينا", 0);
		monthsTable.put("يناير", 0);
		monthsTable.put("يول", 6);
		monthsTable.put("يوليو", 6);
		monthsTable.put("يون", 5);
		monthsTable.put("يونيو", 5);
		monthsTable.put("अक्‍तूबर", 9);
		monthsTable.put("अगस्त", 7);
		monthsTable.put("अप्रैल", 3);
		monthsTable.put("जनवरी", 0);
		monthsTable.put("जुलाई", 6);
		monthsTable.put("जून", 5);
		monthsTable.put("दिसंबर", 11);
		monthsTable.put("नवंबर", 10);
		monthsTable.put("फ़रवरी", 1);
		monthsTable.put("मई", 4);
		monthsTable.put("मार्च", 2);
		monthsTable.put("सितंबर", 8);
		monthsTable.put("ก.ค.", 6);
		monthsTable.put("ก.พ.", 1);
		monthsTable.put("ก.ย.", 8);
		monthsTable.put("กค", 6);
		monthsTable.put("กพ", 1);
		monthsTable.put("กย", 8);
		monthsTable.put("กรกฎาคม", 6);
		monthsTable.put("กันยายน", 8);
		monthsTable.put("กุมภาพันธ์", 1);
		monthsTable.put("ต.ค.", 9);
		monthsTable.put("ตค", 9);
		monthsTable.put("ตุลาคม", 9);
		monthsTable.put("ธ.ค.", 11);
		monthsTable.put("ธค", 11);
		monthsTable.put("ธันวาคม", 11);
		monthsTable.put("พ.ค.", 4);
		monthsTable.put("พ.ย.", 10);
		monthsTable.put("พค", 4);
		monthsTable.put("พย", 10);
		monthsTable.put("พฤศจิกายน", 10);
		monthsTable.put("พฤษภาคม", 4);
		monthsTable.put("ม.ค.", 0);
		monthsTable.put("มกราคม", 0);
		monthsTable.put("มค", 0);
		monthsTable.put("มิ.ย.", 5);
		monthsTable.put("มิถุนายน", 5);
		monthsTable.put("มิย", 5);
		monthsTable.put("มี.ค.", 2);
		monthsTable.put("มีค", 2);
		monthsTable.put("มีนาคม", 2);
		monthsTable.put("ส.ค.", 7);
		monthsTable.put("สค", 7);
		monthsTable.put("สิงหาคม", 7);
		monthsTable.put("เม.ย.", 3);
		monthsTable.put("เมย", 3);
		monthsTable.put("เมษายน", 3);

		daysTable.put("Ahad", 1);
		daysTable.put("Ahd", 1);
		daysTable.put("An", 3);
		daysTable.put("Antradienis", 3);
		daysTable.put("Aoine", 6);
		daysTable.put("C", 5);
		daysTable.put("Cead", 4);
		daysTable.put("ceturtdiena", 5);
		daysTable.put("Chủ nhật", 1);
		daysTable.put("Cmt", 7);
		daysTable.put("CN", 1);
		daysTable.put("Cs", 5);
		daysTable.put("csütörtök", 5);
		daysTable.put("Cum", 6);
		daysTable.put("Cuma", 6);
		daysTable.put("Cumartesi", 7);
		daysTable.put("Cz", 5);
		daysTable.put("czwartek", 5);
		daysTable.put("Céad", 4);
		daysTable.put("D", 1);
		daysTable.put("dc", 4);
		daysTable.put("dc.", 4);
		daysTable.put("De Ceadaoin", 4);
		daysTable.put("De Domhnaigh", 1);
		daysTable.put("De hAoine", 6);
		daysTable.put("De Luain", 2);
		daysTable.put("De Máirt", 3);
		daysTable.put("De Sathairn", 7);
		daysTable.put("Dear", 5);
		daysTable.put("Deardaoin", 5);
		daysTable.put("dg", 1);
		daysTable.put("dg.", 1);
		daysTable.put("Di", 3);
		daysTable.put("Die", 1);
		daysTable.put("Dienstag", 3);
		daysTable.put("dijous", 5);
		daysTable.put("dilluns", 2);
		daysTable.put("dim", 1);
		daysTable.put("dim.", 1);
		daysTable.put("dimanche", 1);
		daysTable.put("dimarts", 3);
		daysTable.put("dimecres", 4);
		daysTable.put("dinsdag", 3);
		daysTable.put("dissabte", 7);
		daysTable.put("diumenge", 1);
		daysTable.put("divendres", 6);
		daysTable.put("dj", 5);
		daysTable.put("dj.", 5);
		daysTable.put("dl", 2);
		daysTable.put("dl.", 2);
		daysTable.put("Do", 5);
		daysTable.put("dom", 1);
		daysTable.put("domenica", 1);
		daysTable.put("Domh", 1);
		daysTable.put("domingo", 1);
		daysTable.put("donderdag", 5);
		daysTable.put("Donnerstag", 5);
		daysTable.put("ds", 7);
		daysTable.put("ds.", 7);
		daysTable.put("dt", 3);
		daysTable.put("dt.", 3);
		daysTable.put("duminică", 1);
		daysTable.put("dv", 6);
		daysTable.put("dv.", 6);
		daysTable.put("Dé Céadaoin", 4);
		daysTable.put("Dé Domhnaigh", 1);
		daysTable.put("Dé hAoine", 6);
		daysTable.put("Dé Luain", 2);
		daysTable.put("Dé Máirt", 3);
		daysTable.put("Dé Sathairn", 7);
		daysTable.put("Déar", 5);
		daysTable.put("Déardaoin", 5);
		daysTable.put("E", 2);
		daysTable.put("e diel", 1);
		daysTable.put("e enjte", 5);
		daysTable.put("e hënë", 2);
		daysTable.put("e martë", 3);
		daysTable.put("e mërkurë", 4);
		daysTable.put("e premte", 6);
		daysTable.put("e shtunë", 7);
		daysTable.put("Enj", 5);
		daysTable.put("Erb", 4);
		daysTable.put("esmaspäev", 2);
		daysTable.put("fim", 5);
		daysTable.put("fim.", 5);
		daysTable.put("fimmtudagur", 5);
		daysTable.put("fr", 6);
		daysTable.put("fredag", 6);
		daysTable.put("Freitag", 6);
		daysTable.put("Fri", 6);
		daysTable.put("Friday", 6);
		daysTable.put("fös", 6);
		daysTable.put("fös.", 6);
		daysTable.put("föstudagur", 6);
		daysTable.put("gio", 5);
		daysTable.put("giovedì", 5);
		daysTable.put("H", 2);
		daysTable.put("hetfő", 2);
		daysTable.put("hétfő", 2);
		daysTable.put("Hën", 2);
		daysTable.put("Il-Ġimgħa", 6);
		daysTable.put("Il-Ħadd", 1);
		daysTable.put("Il-Ħamis", 5);
		daysTable.put("Is-Sibt", 7);
		daysTable.put("Isn", 2);
		daysTable.put("Isnin", 2);
		daysTable.put("It-Tlieta", 3);
		daysTable.put("It-Tnejn", 2);
		daysTable.put("J", 5);
		daysTable.put("jeu", 5);
		daysTable.put("jeu.", 5);
		daysTable.put("jeudi", 5);
		daysTable.put("joi", 5);
		daysTable.put("jue", 5);
		daysTable.put("jueves", 5);
		daysTable.put("Jum", 6);
		daysTable.put("Jumaat", 6);
		daysTable.put("Jumat", 6);
		daysTable.put("K", 4);
		daysTable.put("Kam", 5);
		daysTable.put("Kamis", 5);
		daysTable.put("ke", 4);
		daysTable.put("kedd", 3);
		daysTable.put("keskiviikko", 4);
		daysTable.put("Ketvirtadienis", 5);
		daysTable.put("Kha", 5);
		daysTable.put("Khamis", 5);
		daysTable.put("kolmapäev", 4);
		daysTable.put("Kt", 5);
		daysTable.put("L", 2);
		daysTable.put("L-Erbgħa", 4);
		daysTable.put("la", 7);
		daysTable.put("lau", 7);
		daysTable.put("lau.", 7);
		daysTable.put("lauantai", 7);
		daysTable.put("laugardagur", 7);
		daysTable.put("laupäev", 7);
		daysTable.put("laurdag", 7);
		daysTable.put("Luan", 2);
		daysTable.put("lun", 2);
		daysTable.put("lun.", 2);
		daysTable.put("lundi", 2);
		daysTable.put("lunedì", 2);
		daysTable.put("lunes", 2);
		daysTable.put("luni", 2);
		daysTable.put("lö", 7);
		daysTable.put("lördag", 7);
		daysTable.put("lø", 7);
		daysTable.put("lørdag", 7);
		daysTable.put("ma", 2);
		daysTable.put("maanantai", 2);
		daysTable.put("maandag", 2);
		daysTable.put("mandag", 2);
		daysTable.put("mar", 3);
		daysTable.put("mar.", 3);
		daysTable.put("mardi", 3);
		daysTable.put("martedì", 3);
		daysTable.put("martes", 3);
		daysTable.put("marţi", 3);
		daysTable.put("mer", 4);
		daysTable.put("mer.", 4);
		daysTable.put("mercoledì", 4);
		daysTable.put("mercredi", 4);
		daysTable.put("Mi", 4);
		daysTable.put("mie", 4);
		daysTable.put("miercoles", 4);
		daysTable.put("miercuri", 4);
		daysTable.put("Min", 1);
		daysTable.put("Minggu", 1);
		daysTable.put("Mittwoch", 4);
		daysTable.put("mié", 4);
		daysTable.put("miércoles", 4);
		daysTable.put("mið", 4);
		daysTable.put("mið.", 4);
		daysTable.put("miðvikudagur", 4);
		daysTable.put("Mo", 2);
		daysTable.put("Mon", 2);
		daysTable.put("Monday", 2);
		daysTable.put("Montag", 2);
		daysTable.put("Máirt", 3);
		daysTable.put("mán", 2);
		daysTable.put("mán.", 2);
		daysTable.put("mánudagur", 2);
		daysTable.put("må", 2);
		daysTable.put("måndag", 2);
		daysTable.put("Mër", 4);
		daysTable.put("N", 1);
		daysTable.put("Ne", 1);
		daysTable.put("ned", 1);
		daysTable.put("nedelja", 1);
		daysTable.put("Nedeľa", 1);
		daysTable.put("nedjelja", 1);
		daysTable.put("Neděle", 1);
		daysTable.put("neljapäev", 5);
		daysTable.put("niedziela", 1);
		daysTable.put("O", 3);
		daysTable.put("on", 4);
		daysTable.put("onsdag", 4);
		daysTable.put("otrdiena", 3);
		daysTable.put("P", 2);
		daysTable.put("Paz", 1);
		daysTable.put("Pazar", 1);
		daysTable.put("Pazartesi", 2);
		daysTable.put("pe", 6);
		daysTable.put("Penktadienis", 6);
		daysTable.put("pentek", 6);
		daysTable.put("Per", 5);
		daysTable.put("perjantai", 6);
		daysTable.put("Perşembe", 5);
		daysTable.put("pet", 6);
		daysTable.put("petak", 6);
		daysTable.put("Petek", 6);
		daysTable.put("Pi", 6);
		daysTable.put("Piatok", 6);
		daysTable.put("piektdiena", 6);
		daysTable.put("Pirmadienis", 2);
		daysTable.put("pirmdiena", 2);
		daysTable.put("piątek", 6);
		daysTable.put("Pk", 6);
		daysTable.put("Pn", 2);
		daysTable.put("Po", 2);
		daysTable.put("pon", 2);
		daysTable.put("Pondelok", 2);
		daysTable.put("Pondělí", 2);
		daysTable.put("ponedeljak", 2);
		daysTable.put("Ponedeljek", 2);
		daysTable.put("ponedjeljak", 2);
		daysTable.put("poniedziałek", 2);
		daysTable.put("Pr", 2);
		daysTable.put("Pre", 6);
		daysTable.put("Pt", 6);
		daysTable.put("Pzt", 2);
		daysTable.put("Pá", 6);
		daysTable.put("Pátek", 6);
		daysTable.put("péntek", 6);
		daysTable.put("pühapäev", 1);
		daysTable.put("Qua", 4);
		daysTable.put("Quarta-feira", 4);
		daysTable.put("Qui", 5);
		daysTable.put("Quinta-feira", 5);
		daysTable.put("R", 6);
		daysTable.put("Rab", 4);
		daysTable.put("Rabu", 4);
		daysTable.put("reede", 6);
		daysTable.put("S", 7);
		daysTable.put("Sa", 7);
		daysTable.put("sab", 7);
		daysTable.put("sabato", 7);
		daysTable.put("Sabtu", 7);
		daysTable.put("Sal", 3);
		daysTable.put("Salı", 3);
		daysTable.put("sam", 7);
		daysTable.put("sam.", 7);
		daysTable.put("samedi", 7);
		daysTable.put("Samstag", 7);
		daysTable.put("Sat", 7);
		daysTable.put("Sath", 7);
		daysTable.put("Saturday", 7);
		daysTable.put("Seg", 2);
		daysTable.put("Segunda-feira", 2);
		daysTable.put("Sekmadienis", 1);
		daysTable.put("Sel", 3);
		daysTable.put("Selasa", 3);
		daysTable.put("Sen", 2);
		daysTable.put("Senin", 2);
		daysTable.put("sestdiena", 7);
		daysTable.put("Sex", 6);
		daysTable.put("Sexta-feira", 6);
		daysTable.put("Sht", 7);
		daysTable.put("Sib", 7);
		daysTable.put("Sk", 1);
		daysTable.put("So", 1);
		daysTable.put("Sob", 7);
		daysTable.put("Sobota", 7);
		daysTable.put("Sonntag", 1);
		daysTable.put("sre", 4);
		daysTable.put("sreda", 4);
		daysTable.put("sri", 4);
		daysTable.put("srijeda", 4);
		daysTable.put("St", 4);
		daysTable.put("Streda", 4);
		daysTable.put("Středa", 4);
		daysTable.put("su", 1);
		daysTable.put("sub", 7);
		daysTable.put("subota", 7);
		daysTable.put("Sun", 1);
		daysTable.put("sun.", 1);
		daysTable.put("sundag", 1);
		daysTable.put("Sunday", 1);
		daysTable.put("sunnudagur", 1);
		daysTable.put("sunnuntai", 1);
		daysTable.put("Sv", 1);
		daysTable.put("svētdiena", 1);
		daysTable.put("Sze", 4);
		daysTable.put("szerda", 4);
		daysTable.put("Szo", 7);
		daysTable.put("szombat", 7);
		daysTable.put("sáb", 7);
		daysTable.put("sábado", 7);
		daysTable.put("sâmbătă", 7);
		daysTable.put("sö", 1);
		daysTable.put("söndag", 1);
		daysTable.put("sø", 1);
		daysTable.put("søndag", 1);
		daysTable.put("T", 4);
		daysTable.put("teisipäev", 3);
		daysTable.put("Ter", 3);
		daysTable.put("Terça-feira", 3);
		daysTable.put("Th 2", 2);
		daysTable.put("Th 3", 3);
		daysTable.put("Th 4", 4);
		daysTable.put("Th 5", 5);
		daysTable.put("Th 6", 6);
		daysTable.put("Th 7", 7);
		daysTable.put("Thu", 5);
		daysTable.put("Thursday", 5);
		daysTable.put("Thứ ba", 3);
		daysTable.put("Thứ bảy", 7);
		daysTable.put("Thứ hai", 2);
		daysTable.put("Thứ năm", 5);
		daysTable.put("Thứ sáu", 6);
		daysTable.put("Thứ tư", 4);
		daysTable.put("ti", 3);
		daysTable.put("tiistai", 3);
		daysTable.put("tirsdag", 3);
		daysTable.put("tisdag", 3);
		daysTable.put("Tli", 3);
		daysTable.put("Tne", 2);
		daysTable.put("to", 5);
		daysTable.put("Tor", 3);
		daysTable.put("Torek", 3);
		daysTable.put("torsdag", 5);
		daysTable.put("torstai", 5);
		daysTable.put("Tr", 4);
		daysTable.put("Trečiadienis", 4);
		daysTable.put("trešdiena", 4);
		daysTable.put("Tue", 3);
		daysTable.put("Tuesday", 3);
		daysTable.put("ty", 3);
		daysTable.put("tysdag", 3);
		daysTable.put("Ut", 3);
		daysTable.put("uto", 3);
		daysTable.put("utorak", 3);
		daysTable.put("Utorok", 3);
		daysTable.put("V", 6);
		daysTable.put("vasárnap", 1);
		daysTable.put("ven", 6);
		daysTable.put("ven.", 6);
		daysTable.put("vendredi", 6);
		daysTable.put("venerdì", 6);
		daysTable.put("vie", 6);
		daysTable.put("viernes", 6);
		daysTable.put("vineri", 6);
		daysTable.put("vr", 6);
		daysTable.put("vrijdag", 6);
		daysTable.put("Wed", 4);
		daysTable.put("Wednesday", 4);
		daysTable.put("wo", 4);
		daysTable.put("woensdag", 4);
		daysTable.put("Wt", 3);
		daysTable.put("wtorek", 3);
		daysTable.put("za", 7);
		daysTable.put("zaterdag", 7);
		daysTable.put("zo", 1);
		daysTable.put("zondag", 1);
		daysTable.put("Çar", 4);
		daysTable.put("Çarşamba", 4);
		daysTable.put("Út", 3);
		daysTable.put("Úterý", 3);
		daysTable.put("þri", 3);
		daysTable.put("þri.", 3);
		daysTable.put("þriðjudagur", 3);
		daysTable.put("čet", 5);
		daysTable.put("Četrtek", 5);
		daysTable.put("četvrtak", 5);
		daysTable.put("Čt", 5);
		daysTable.put("Čtvrtek", 5);
		daysTable.put("Ġim", 6);
		daysTable.put("Ħad", 1);
		daysTable.put("Ħam", 5);
		daysTable.put("Śr", 4);
		daysTable.put("środa", 4);
		daysTable.put("Šeštadienis", 7);
		daysTable.put("Št", 7);
		daysTable.put("Štvrtok", 5);
		daysTable.put("Δευ", 2);
		daysTable.put("Δευτέρα", 2);
		daysTable.put("Κυρ", 1);
		daysTable.put("Κυριακή", 1);
		daysTable.put("Πέμπτη", 5);
		daysTable.put("Παρ", 6);
		daysTable.put("Παρασκευή", 6);
		daysTable.put("Πεμ", 5);
		daysTable.put("Σάββατο", 7);
		daysTable.put("Σαβ", 7);
		daysTable.put("Τετ", 4);
		daysTable.put("Τετάρτη", 4);
		daysTable.put("Τρίτη", 3);
		daysTable.put("Τρι", 3);
		daysTable.put("ат", 3);
		daysTable.put("аўторак", 3);
		daysTable.put("воскресенье", 1);
		daysTable.put("Вс", 1);
		daysTable.put("Вт", 3);
		daysTable.put("вт.", 3);
		daysTable.put("Вторник", 3);
		daysTable.put("вівторок", 3);
		daysTable.put("Нд", 1);
		daysTable.put("нед", 1);
		daysTable.put("нед.", 1);
		daysTable.put("недела", 1);
		daysTable.put("Неделя", 1);
		daysTable.put("недеља", 1);
		daysTable.put("неділя", 1);
		daysTable.put("нядзеля", 1);
		daysTable.put("п'ятниця", 6);
		daysTable.put("панядзелак", 2);
		daysTable.put("пет", 6);
		daysTable.put("пет.", 6);
		daysTable.put("петак", 6);
		daysTable.put("петок", 6);
		daysTable.put("Петък", 6);
		daysTable.put("Пн", 2);
		daysTable.put("пон", 2);
		daysTable.put("пон.", 2);
		daysTable.put("Понеделник", 2);
		daysTable.put("понедельник", 2);
		daysTable.put("понедељак", 2);
		daysTable.put("понеділок", 2);
		daysTable.put("Пт", 6);
		daysTable.put("пятница", 6);
		daysTable.put("пятніца", 6);
		daysTable.put("саб", 7);
		daysTable.put("саб.", 7);
		daysTable.put("сабота", 7);
		daysTable.put("Сб", 7);
		daysTable.put("серада", 4);
		daysTable.put("середа", 4);
		daysTable.put("Ср", 4);
		daysTable.put("сре", 4);
		daysTable.put("сре.", 4);
		daysTable.put("среда", 4);
		daysTable.put("сри", 4);
		daysTable.put("сриједа", 4);
		daysTable.put("Сряда", 4);
		daysTable.put("суб", 7);
		daysTable.put("суббота", 7);
		daysTable.put("субота", 7);
		daysTable.put("Събота", 7);
		daysTable.put("уто", 3);
		daysTable.put("уторак", 3);
		daysTable.put("чацвер", 5);
		daysTable.put("чет", 5);
		daysTable.put("чет.", 5);
		daysTable.put("четвер", 5);
		daysTable.put("четверг", 5);
		daysTable.put("четвртак", 5);
		daysTable.put("четврток", 5);
		daysTable.put("Четвъртък", 5);
		daysTable.put("Чт", 5);
		daysTable.put("чц", 5);
		daysTable.put("א", 1);
		daysTable.put("ב", 2);
		daysTable.put("ג", 3);
		daysTable.put("ד", 4);
		daysTable.put("ה", 5);
		daysTable.put("ו", 6);
		daysTable.put("יום חמישי", 5);
		daysTable.put("יום ראשון", 1);
		daysTable.put("יום רביעי", 4);
		daysTable.put("יום שישי", 6);
		daysTable.put("יום שלישי", 3);
		daysTable.put("יום שני", 2);
		daysTable.put("ש", 7);
		daysTable.put("שבת", 7);
		daysTable.put("الأحد", 1);
		daysTable.put("الأربعاء", 4);
		daysTable.put("الاثنين", 2);
		daysTable.put("الثلاثاء", 3);
		daysTable.put("الجمعة", 6);
		daysTable.put("الخميس", 5);
		daysTable.put("السبت", 7);
		daysTable.put("ث", 3);
		daysTable.put("ج", 6);
		daysTable.put("ح", 1);
		daysTable.put("خ", 5);
		daysTable.put("ر", 4);
		daysTable.put("س", 7);
		daysTable.put("ن", 2);
		daysTable.put("गुरु", 5);
		daysTable.put("गुरुवार", 5);
		daysTable.put("बुध", 4);
		daysTable.put("बुधवार", 4);
		daysTable.put("मंगल", 3);
		daysTable.put("मंगलवार", 3);
		daysTable.put("रवि", 1);
		daysTable.put("रविवार", 1);
		daysTable.put("शनि", 7);
		daysTable.put("शनिवार", 7);
		daysTable.put("शुक्र", 6);
		daysTable.put("शुक्रवार", 6);
		daysTable.put("सोम", 2);
		daysTable.put("सोमवार", 2);
		daysTable.put("จ", 2);
		daysTable.put("จ.", 2);
		daysTable.put("พ", 4);
		daysTable.put("พ.", 4);
		daysTable.put("พฤ", 5);
		daysTable.put("พฤ.", 5);
		daysTable.put("วันจันทร์", 2);
		daysTable.put("วันพฤหัสบดี", 5);
		daysTable.put("วันพุธ", 4);
		daysTable.put("วันศุกร์", 6);
		daysTable.put("วันอังคาร", 3);
		daysTable.put("วันอาทิตย์", 1);
		daysTable.put("วันเสาร์", 7);
		daysTable.put("ศ", 6);
		daysTable.put("ศ.", 6);
		daysTable.put("ส", 7);
		daysTable.put("ส.", 7);
		daysTable.put("อ", 3);
		daysTable.put("อ.", 3);
		daysTable.put("อา", 1);
		daysTable.put("อา.", 1);
	}

	/**
	 * try read a Date from a Object
	 */
	public static Date convertToDate(Object obj) {
		if (obj == null)
			return null;
		if (obj instanceof Date)
			return (Date) obj;
		if (obj instanceof String) {
			StringTokenizer st = new StringTokenizer((String) obj, " -/:,.+");
			String s1 = "";
			if (!st.hasMoreTokens())
				return null;
			s1 = st.nextToken();
			if (s1.length() == 4 && Character.isDigit(s1.charAt(0)))
				return getYYYYMMDD(st, s1);
			// skip Day if present.
			if (daysTable.containsKey(s1)) {
				if (!st.hasMoreTokens())
					return null;
				s1 = st.nextToken();
			}
			if (monthsTable.containsKey(s1))
				return getMMDDYYYY(st, s1);

			if (Character.isDigit(s1.charAt(0)))
				return getDDMMYYYY(st, s1);
			return null;
		}
		throw new RuntimeException("Primitive: Can not convert " + obj.getClass().getName() + " to int");
	}

	private static Date getYYYYMMDD(StringTokenizer st, String s1) {
		GregorianCalendar cal = new GregorianCalendar(2000, 0, 0, 0, 0, 0);
		cal.setTimeInMillis(0);

		int year = Integer.parseInt(s1);
		cal.set(Calendar.YEAR, year);
		if (!st.hasMoreTokens())
			return cal.getTime();
		s1 = st.nextToken();

		cal.set(Calendar.MONTH, parseMonth(s1));
		if (!st.hasMoreTokens())
			return cal.getTime();

		s1 = st.nextToken();
		if (Character.isDigit(s1.charAt(0))) {
			if (s1.length() == 5 && s1.charAt(2) == 'T') {
				// TIME + TIMEZONE
				int day = Integer.parseInt(s1.substring(0, 2));
				cal.set(Calendar.DAY_OF_MONTH, day);
				return addHour(st, cal, s1.substring(3));
			}
			int day = Integer.parseInt(s1);
			cal.set(Calendar.DAY_OF_MONTH, day);
			return addHour(st, cal, null);
		}
		return cal.getTime();
	}

	private static int getYear(String s1) {
		int year = Integer.parseInt(s1);
		// CET ?
		if (year < 100) {
			if (year > 23)
				year += 2000;
			else
				year += 1900;
		}
		return year;
	}

	private static Date getMMDDYYYY(StringTokenizer st, String s1) {
		GregorianCalendar cal = new GregorianCalendar(2000, 0, 0, 0, 0, 0);
		Integer month = monthsTable.get(s1);
		if (month == null)
			throw new NullPointerException("can not parse " + s1 + " as month");
		cal.set(Calendar.MONTH, month);
		if (!st.hasMoreTokens())
			return null;
		s1 = st.nextToken();
		// DAY
		int day = Integer.parseInt(s1);
		cal.set(Calendar.DAY_OF_MONTH, day);

		if (!st.hasMoreTokens())
			return null;
		s1 = st.nextToken();
		if (Character.isLetter(s1.charAt(0))) {
			if (!st.hasMoreTokens())
				return null;
			s1 = st.nextToken();
		}
		cal.set(Calendar.YEAR, getYear(s1));

		// /if (st.hasMoreTokens())
		// return null;
		// s1 = st.nextToken();
		return addHour(st, cal, null);
		// return cal.getTime();
	}

	private static Date getDDMMYYYY(StringTokenizer st, String s1) {
		GregorianCalendar cal = new GregorianCalendar(2000, 0, 0, 0, 0, 0);
		int day = Integer.parseInt(s1);
		cal.set(Calendar.DAY_OF_MONTH, day);
		if (!st.hasMoreTokens())
			return null;
		s1 = st.nextToken();
		cal.set(Calendar.MONTH, parseMonth(s1));

		if (!st.hasMoreTokens())
			return null;
		s1 = st.nextToken();
		cal.set(Calendar.YEAR, getYear(s1));
		return addHour(st, cal, null);
	}

	private static Date addHour(StringTokenizer st, Calendar cal, String s1) {
		// String s1;
		if (s1 == null) {
			if (!st.hasMoreTokens())
				return cal.getTime();
			s1 = st.nextToken();
		}
		cal.set(Calendar.HOUR_OF_DAY, Integer.parseInt(s1));

		if (!st.hasMoreTokens())
			return cal.getTime();
		s1 = st.nextToken();

		s1 = trySkip(st, s1, cal);
		if (s1 == null)
			return cal.getTime();

		// if (s1.equalsIgnoreCase("h")) {
		// if (!st.hasMoreTokens())
		// return cal.getTime();
		// s1 = st.nextToken();
		// }
		cal.set(Calendar.MINUTE, Integer.parseInt(s1));

		if (!st.hasMoreTokens())
			return cal.getTime();
		s1 = st.nextToken();

		s1 = trySkip(st, s1, cal);
		if (s1 == null)
			return cal.getTime();

		cal.set(Calendar.SECOND, Integer.parseInt(s1));
		if (!st.hasMoreTokens())
			return cal.getTime();
		s1 = st.nextToken();

		s1 = trySkip(st, s1, cal);
		if (s1 == null)
			return cal.getTime();
		cal.set(Calendar.MILLISECOND, Integer.parseInt(s1));
		// TODO ADD TIME ZONE
		s1 = trySkip(st, s1, cal);
		// if (s1.equalsIgnoreCase("pm"))
		// cal.add(Calendar.HOUR_OF_DAY, 12);
		return cal.getTime();
	}

	private static String trySkip(StringTokenizer st, String s1, Calendar cal) {
		while (voidData.contains(s1)) {
			if (s1.equalsIgnoreCase("pm"))
				cal.add(Calendar.HOUR_OF_DAY, 12);
			if (!st.hasMoreTokens())
				return null;
			s1 = st.nextToken();
		}
		return s1;
	}
}
